home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs49.d81
/
hack6a.sfx
/
issue6a
Wrap
Text File
|
1990-02-12
|
51KB
|
1,165 lines
########
##################
###### ######
#####
##### #### #### ## ##### #### #### #### #### #### #####
##### ## ## #### ## ## ## ### ## #### ## ## ##
##### ######## ## ## ## ##### ## ## ## ## ##
##### ## ## ######## ## ## ## ### ## ## #### ## ##
##### #### #### #### #### ##### #### #### #### #### #### ######
##### ##
###### ###### ╔SSUE #6
################## ╙EPT. 5, 1993
########
---------------------------------------------------------------------(V1.0)---
┼DITOR'S ╬OTES:
BY ├RAIG ╘AYLOR
╙CHOOL, 2 JOBS, A PLAY, AND OTHER WORK HAS SERIOUSLY RESTRICTED THE AMOUNT
OF TIME THAT ╔ AM ABLE TO DEVOTE TO ├OMMODORE ╚ACKING. ╫HAT ╔ AM LOOKING AT
DOING NOW IS TO STOP WRITING ARTICLES FOR ├OMMODORE ╚ACKING AND HOPING THAT
╔'LL STILL HAVE ENOUGH TIME TO WRITE THESE NOTES, AND ORGANIZE AND PULL ALL
THE OTHER ARTICLES BY OTHER CONTRIBUTORS TOGETHER. ╘HE TWO ARTICLES ╔
HAD HOPED TO INCLUDE IN THIS ISSUE : THE ONE ABOUT MULTI-TASKING AND
ABOUT THE 1351 HAVE AGAIN BEEN DELAYED. ╔'VE DECIDED TO GO AHEAD AND
RELEASE ISSUE 6 AND HOPEFULLY WILL HAVE THEM IN THE NEXT ISSUE.
(╥EMEMBER: ┘OU GET WHAT YOU PAY FOR.. *SMILE*)
┴S ALWAYS, ├OMMODORE ╚ACKING IS CONSTANTLY LOOKING FOR ARTICLES, NOTES,
SHORT LITTLE PROGRAMS, WHAT-NOT ON ANY SIDE OF THE ├OMMODORE 64 AND 128 -
PRIMARILY ON THE TECHNICAL OR HARDWARE SIDE. ╔F YOU THINK YOU HAVE SOMETHING
IN MIND, OR ALREADY WRITTEN THEN FEEL FREE TO DROP ME A LINE LETTING ME
KNOW.
╔N REGARDS TO SEVERAL QUERIES RECENTLY ABOUT REPRINTING INDIVIDUAL ARTICLES
THAT HAVE APPEARED IN ├OMMODORE ╚ACKING. ┘OU MAY REPRINT ├OMMODORE ╚ACKING
AND REDISTRIBUTE IN WHOLE, FREELY. ╞OR USE OF INDIVIDUAL ARTICLES YOU _MUST_
CONTANCT THE INDIVIDUAL AUTHOR AS THEY STILL RETAIN RIGHTS TO IT. ╨LEASE SEE
THE LEGAL NOTICE / MUMBO BELOW.
╔ RECENTLY RECIEVED SOME MAIL FROM WOLFGANG@HALCYON REGARDING A DISK
MAGAZINE THAT HE WAS IN THE PROCESS OF STARTING AND HE HAS WRITTEN THE
FOLLOWING PREVIEW OF A DISK MAGAZINE THAT LOOKS TO BE EXCITING:
"_╙CENERY_, A NEW DISK-MAGAZINE FOCUSING ON THE AMERICAN AND
EUROPEAN DEMO SCENES, WILL SOON BE AVAILABLE FOR DOWNLOAD AT A
SITE/┬┬╙ NEAR YOU! ╫ITH ARTICLES ON EVERYTHING FROM CODING TO
INSTRUMENT SYNTHESIS TO ART, _╙CENERY_ WILL BE THE DEFINITIVE WORD
WHEN IT COMES TO CREATING A DEMO, OR SIMPLY CODING IN GENERAL.
┴RTICLES ARE BEING WRITTEN BY SOME OF THE TOP NAMES IN THE SCENE,
AND PROMISE TO HELP EVERYBODY FROM THE ┬ASIC ┬ABY TO THE ═╠ ═OGUL!
╙ET TO BE RELEASED MID-┴UGUST, _╙CENERY_ WILL HOPEFULLY BE A WORTHY
EDITION TO THE LIKES OF ├ODER'S ╫ORLD AND ├=╚ACKING. ╔ AM MAKING
THE MAGAZINE AVAILABLE ON VARIOUS ╔NTERNET SITES, SO LOOK FOR IT. ╫E
ARE ALWAYS ON THE LOOKOUT FOR ART, MUSIC, AND CODING TALENT, AND IF
YOU'D BE INTERESTED IN SUBMITTING AN ARTICLE FOR PUBLICATION, OR
SIMPLY HAVE A QUESTION OR COMMENT, PLEASE MAIL ME AT
'WOLFGANG@HALCYON.COM'. ╘HANKS.. AND SEE YOU ON THE ╬ET!"
================================================================================
╨LEASE NOTE THAT THIS ISSUE AND PRIOR ONES ARE AVAILABLE VIA ANONYMOUS ╞╘╨
FROM CCOSUN.CALTECH.EDU UNDER PUB/RKNOP/HACKING.MAG AND VIA A MAILSERVER
WHICH DOCUMENTATION CAN BE OBTAINED BY SENDING MAIL TO
"DUCK@PEMBVAX1.PEMBROKE.EDU" WITH A SUBJECT LINE OF "MAILSERVER" AND THE
LINE "HELP" IN THE BODY OF THE MESSAGE.
================================================================================
╬╧╘╔├┼: ╨ERMISSION IS GRANTED TO RE-DISTRUBTE THIS "NET-MAGAZINE", IN
WHOLE, FREELY FOR NON-PROFIT USE. ╚OWEVER, PLEASE CONTACT INDIVIDUAL
AUTHORS FOR PERMISSION TO PUBLISH OR RE-DISTRIBUTE ARTICLES SEPERATELY.
┴ CHARGE OF NO GREATHER THAN 5 ╒╙ DOLLARS OR EQUIVLENT MAY BE CHARGED FOR
LIBRARY SERVICE / DISKETTE COSTS FOR THIS "NET-MAGAZINE".
================================================================================
╔N ╘HIS ╔SSUE:
─┘├╨ - ╚ORIZONTAL ╙CROLLING
─┘├╨ - IS A NAME FOR A HORIZONTAL SCROLLER, WHERE CHARACTERS GO SMOOTHLY
UP AND DOWN DURING THEIR VOYAGE FROM RIGHT TO LEFT. ╧NE POSSIBILITY IS A
SCROLL WITH 8 CHARACTERS - ONE CHARACTER PER SPRITE, BUT A REAL DEMO CODER
WON'T BE SATISFIED WITH THAT.
╧PENING THE BORDERS
╓╔├ HAS MANY FEATURES AND TRANSPARENT BORDERS ARE ONE OF THEM. ┘OU CAN NOT
MAKE CHARACTERS APPEAR IN THE BORDER, BUT SPRITES ARE DISPLAYED IN THE
BORDER TOO.
┴ ╚EAVY ─UTY ╨OWER SUPPLY FOR THE ├-64
╘HIS ARTICLE DESCRIBES HOW TO BUILD A HEAVIER DUTY POWER SUPPLY FOR YOUR
├OMMODORE 64 COMPUTER AND INCLUDES A FULL SCHEMATIC IN ╟EO╨AINT FORMAT.
╠┌╫ ├OMPRESSION
╠┌╫ IS PERHAPS THE MOST WIDELY USED FORM OF DATA COMPRESSION TODAY. ╔T
IS SIMPLE TO IMPLEMENT AND ACHIEVES VERY DECENT COMPRESSION AT A FAIRLY
QUICK PACE. ╠┌╫ IS USED IN ╨╦┌╔╨ (SHRINK),╨╦┴╥├ (CRUNCH), GIFS,╓.42BIS
AND UNIX'S COMPRESS. ╘HIS ARTICLE WILL ATTEMPT TO EXPLAIN HOW THE
COMPRESSION WORKS WITH A SHORT EXAMPLE AND 6502 SOURCE CODE IN ┬UDDY
FORMAT.
╘╚╥┼┼-╦┼┘ ╥╧╠╠╧╓┼╥ FOR THE ├-128 AND ├-64.
╘HIS ARTICLE EXAMINES HOW A THREE-KEY ROLLOVER MECHANISM WORKS FOR THE
KEYBOARDS OF THE ├=128 AND ├=64 AND WILL PRESENT ╦ERNAL-WEDGE
IMPLEMENTATIONS FOR BOTH MACHINES. ╫EBSTER'S DOESN'T SEEM TO KNOW, SO ╔'LL
TELL YOU THAT THIS MEANS THAT THE MACHINE WILL ACT SENSIBLY IF YOU ARE
HOLDING DOWN ONE KEY AND THEN PRESS ANOTHER WITHOUT RELEASING THE FIRST.
╘HIS WILL BE USEFUL TO FAST TOUCH TYPERS.
================================================================================
╘HE ─EMO ├ORNER: ─┘├╨ - ╚ORIZONTAL ╙CROLLING
BY ╨ASI '┴LBERT' ╧JALA (PO87553@CS.TUT.FI OR ALBERT@CC.TUT.FI))
╫RITTEN: 16-═AY-91 ╘RANSLATION 02-╩UN-92
─┘├╨ - TOO MANY SPRITES !?
--------------------------
─┘├╨ - ─IFFERENT ┘ ├HARACTER ╨OSITION - IS A NAME FOR A HORIZONTAL SCROLLER,
WHERE CHARACTERS GO SMOOTHLY UP AND DOWN DURING THEIR VOYAGE FROM RIGHT TO
LEFT. ╧NE POSSIBILITY IS A SCROLL WITH 8 CHARACTERS - ONE CHARACTER IN EACH
SPRITE, BUT A REAL DEMO CODER WON'T BE SATISFIED WITH THAT.
─EMO CODERS THOUGHT THAT IT LOOKS GOOD TO MAKE THE SCROLLING TEXT CHANGE ITS
VERTICAL POSITION IN THE SAME TIME IT PROCEEDED FROM THE RIGHT SIDE OF THE
SCREEN TO THE LEFT. ╘HE ONLY PROBLEM IS THAT THERE IS ONLY EIGHT SPRITES
AND THAT IS NOT EVEN NEARLY ENOUGH TO SATISFY THE REQUIREMENTS NEEDED FOR
GREAT LOOK. ╙O THE ONLY WAY IS TO USE SCREEN AND SOMEHOW PLOT THE TEXT IN
GRAPHICS, BECAUSE CHARACTER COLUMNS CAN NOT BE SCROLLED INDIVIDUALLY.
╨LOTTING THE CHARACTERS TAKE ABSOLUTELY TOO MUCH TIME, BECAUSE YOU HAVE TO
HANDLE EACH BYTE SEPERATELY AND THE GRAPHICS BITMAP MUST BE CLEARED TOO.
_├HARACTER HACK_
╘HE WHOLE ─┘├╨ STARTED USING CHARACTER GRAPHICS. ┘OU PLOT SIX CHARACTER
ROWS WHERE THE CHARACTER (SCREEN) CODES INCREASE TO THE RIGHT AND DOWN.
╘HIS AREA IS THEN USED LIKE A SMALL BITMAP SCREEN. ┼ACH OF THE TEXT CHARS
ARE DISPLAYED ONE BYTE AT A TIME ON EACH SIX ROWS HIGH CHARACTER COLUMNS.
╘HIS 240 CHARACTER POSITIONS BIG PIECE OF SCREEN CAN BE MOVED HORIZONTALLY
USING THE X-SCROLL REGISTER (THREE LOWEST BITS IN $─016) AND AFTER EIGHT
PIXELS YOU MOVE THE TEXT ITSELF, LIKE IN ANY SCROLL. ╘HE SCREEN IS OF COURSE
REDUCED TO 38 COLUMNS WIDE TO HIDE THE JITTERING ON THE SIDES.
┴ GOOD CODER MAY ALSO CHANGE THE CHARACTER SETS DURING THE DISPLAY AND
EVEN DOUBLE THE SIZE OF THE SCROLL, BUT BECAUSE THE RASTER TIME HAPPENS
TO GO TO WASTE USING THIS TECHNIQUE ANYWAY, THAT IS NOT VERY FEASIBLE. ╘HERE
ARE ALSO OTHER DIFFICULTIES IN THIS APPROACH, THE BIGGEST IS THE TIME NEEDED
TO CLEAR THE DISPLAY.
_╙AVE CHARACTERS - AND TIME_
┬UT WHY SHOULD WE MOVE AN EIGHT-BYTE-HIGH CHARACTER IMAGE IN A 48-LINE-HIGH
AREA, WHEN 16 IS REALLY ENOUGH ? ╫E CAN USE TWO CHARACTERS FOR THE GRAPHICS
BITMAP AND THEN MOVE THIS IN EIGHT PIXEL STEPS UP AND DOWN. ╘HE LOWEST
THREE BITS OF THE Y-POSITION THEN GIVES US THE OFFSET WHERE THE DATA MUST
BE PLOTTED INSIDE THIS GRAPHICAL REGION. ╘HE TWO CHARACTER CODES ARE USUALLY
SELECTED TO BE CONSECUTIVE ONES SO THAT THE IMAGE DATA HAS ALSO 16
CONSECUTIVE BYTES. [╙EE PICTURE 1.]
_─EMO PROGRAM MIGHT CLEAR THINGS UP_
╘HE DEMO PROGRAM IS CODED USING THE LATTER ALGORITHM. ╘HE PROGRAM FIRST
COPIES THE ├HARACTER ╥╧═ TO RAM, BECAUSE IT IS FASTER TO USE IT FROM THERE.
┘OU CAN EASILY CHANGE THE PROGRAM TO USE YOUR OWN CHARACTER SET INSTEAD,
IF YOU LIKE. ╘HE SINUS DATA FOR THE VERTICAL MOVEMENT IS CREATED OF A 1/4
OF A CYCLE BY MIRRORING IT BOTH HORIZONTALLY AND VERTICALLY.
╘WO MOST TIME CRITICAL PARTS ARE CLEARING THE CHARACTER SET AND PLOTTING THE
NEW ONE. ╬EITHER OF THESE MAY HAPPEN WHEN ╓╔├ IS DRAWING THE AREA WHERE THE
SCROLL IS, SO THERE IS A SLIGHT HURRY. ╒SING DOUBLE BUFFERING TECHNIQUE WE
COULD OVERCOME THIS LIMITATION, BUT THIS IS JUST AN EXAMPLE PROGRAM. ╞OR
SPEED THERE IS ├╠├ ONLY WHEN IT IS ABSOLUTELY NEEDED.
╘HE ╬╘╙├ VERSION IS A BIT CRIPPLED, IT ONLY COVERS 32 COLUMNS AND THUS THE
CHARACTERS SEEM TO APPEAR FROM THIN AIR. ┴NYWAY, THE IDEA SHOULD BECOME
CLEAR.
_╫ANT TO GO TO THE BORDER ?_
╙OME CODERS ARE ALWAYS TRYING TO GET ALL EFFECTS EVER DONE USING THE ├64 GO
TO THE BORDER, AND EVEN SUCCESSFULLY. ╘HE EASIEST WAY IS TO USE ONLY A REGION
OF 21 PIXELS HIGH - SPRITES - AND MOVE THE TEXT EXACTLY LIKE IN CHARACTERS.
╔N FACT ONLY THE DIFFERENT ADDRESSING CAUSES THE DIFFERENCES IN THE CODE.
┼IGHT HORIZONTALLY EXPANDED SPRITES WILL BE JUST ENOUGH TO FILL THE SIDE
BORDERS. ┘OU CAN ALSO MIX THESE TECHIQUES, BUT THEN YOU HAVE THE USUAL
"CHARS-IN-THE-SCREEN-WHILE-BORDER-OPENED"-PROBLEMS (HOWEVER, THEY ARE
SOLVABLE). ╒NFORTUNATELY SPRITE-DYCP IS EVEN MORE SLOWER THAN CHAR-DYCP.
_═ORE MOVEMENT VERTICALLY_
┘OU MIGHT THINK THAT USING THE SPRITES WILL RESTRICT THE SINUS TO ONLY
14 PIXELS. ╬OT REALLY, THE ONLY RESTRICTION IS THAT THE VERTICAL POSITION
DIFFERENCE BETWEEN THREE CONSEQUENT TEXT CHARACTER MUST BE LESS THAN 14
PIXEL LINES. ┼ACH SPRITES' ┘-COORDINATE WILL BE THE MINIMUM OF THE THREE
CHARACTERS RESIDING IN THAT SPRITE. ╠INE OFFSETS INSIDE THE SPRITES
ARE THEN OBTAINED BY SUBTRACTING THE SPRITE Y-COORDINATE FROM THE CHARACTER
Y-COORDINATE. ═AYBE A LITTLE HARD TO FOLLOW, BUT MAYBE A PICTURE WILL
CLEAR THE SITUATION. [╙EE PICTURE 2.]
╙CROLLING HORIZONTALLY IS EASY. ┘OU JUST HAVE TO MOVE SPRITES LIKE YOU WOULD
USE THE CHARACTER HORIZONTAL SCROLL REGISTER AND AFTER EIGHT PIXELS YOU
RESET THE SPRITE POSITIONS AND SCROLL THE TEXT ONE POSITION IN MEMORY.
┴ND OF COURSE, YOU FETCH A NEW CHARACTER FOR THE SCROLL. ╫HEN WE HAVE
DIFFERENT AND CHANGING SPRITE Y-COORDINATES, OPENING THE SIDE BORDERS BECOME
A GREAT DEAL MORE DIFFICULT. ╚OWEVER, IN THIS CASE THERE IS AT LEAST TWO
DIFFERENT WAYS TO DO IT.
_╙TRETCH THE SPRITES_
╘HE EASIEST WAY IS TO POSITION ALL OF THE SPRITES WHERE THE SCROLL WILL
BE WHEN IT IS IN ITS HIGHEST POSITION. ╘HEN STRETCH THE FIRST AND LAST LINE
OF EACH SPRITE SO THAT THE 19 SPRITE LINES IN THE MIDDLE WILL BE ON THE
DESIRED PLACE. ╧PENING THE BORDERS NOW IS TRIVIAL, BECAUSE ALL OF THE SPRITES
ARE PRESENT ON ALL OF THE SCAN LINES AND THEY STEAL A CONSTANT AMOUNT OF
TIME. ╚OWEVER, WE LOSE TWO SPRITE LINES. ╫E MIGHT NOT WANT TO USE THE FIRST
AND THE LAST LINE FOR GRAPHICS, BECAUSE THEY ARE STRETCHED.
[╙EE PREVIOUS ├=╚ACKING ╔SSUES FOR MORE INFORMATION ABOUT STRETCHING AND
STOLEN CYCLES.]
┴ MORE DIFFICULT APPROACH IS TO UNROLL THE ROUTINE AND LET ANOTHER ROUTINE
COUNT THE SPRITES PRESENT IN EACH LINE AND THEN CHANGE THE TIME THE ROUTINE
USES ACCORDINGLY. ╔N THIS WAY YOU SAVE TIME DURING THE DISPLAY FOR OTHER
EFFECTS, LIKE COLOR BARS, BECAUSE STRETCHING WILL TAKE AT LEAST 12 CYCLES
ON EACH RASTER LINE. ╧N THE OTHER HAND, IF THE SINUS IS CONSTANT (USER IS
NOT ALLOWED TO CHANGE IT), IT IS USUALLY POSSIBLE TO EMBEDD THE COUNT
ROUTINE DIRECTLY TO THE BORDER OPENING PART OF THE ROUTINE.
_═ORE SPRITES_
┘OU DON'T NECASSARILY NEED TO PLOT THE CHARACTERS IN SPRITES TO HAVE MORE
THAN EIGHT CHARACTERS. ╒SING A SPRITE MULTIPLEXING TECHIQUES YOU CAN DOUBLE
OR TRIPLE THE NUMBER OF SPRITES AVAILABLE. ┘OU CAN DIVIDE THE SCROLL
VERTICALLY INTO SEVERAL AREAS AND BECAUSE THE Y-COORDINATE OF THE SCROLL
IS A SINUS, THERE ALWAYS IS A FIXED MAXIMUM NUMBER OF SPRITES IN EACH AREA.
╘HIS NUMBER IS ALWAYS SMALLER THAN THE TOTAL NUMBER OF SPRITES IN THE
WHOLE SCROLL. ╔ WON'T GO INTO DETAIL, BUT DIDN'T WANT TO LEAVE THIS OUT
COMPLETELY. [╙EE PICTURE 3.]
_╙MOOTHER AND SMOOTHER_
╫HY BE SATISFIED WITH A SCROLL WITH ONLY 40 DIFFERENT SLICES HORIZONTALLY ?
╔T SHOULD BE POSSIBLE TO COUNT OWN COORDINATES FOR EACH PIXEL COLUMN ON
THE SCROLL. ╔N FACT THE PROGRAM WON'T BE MUCH DIFFERENT, BUT THE ROUTINE
MUST ALSO MASK THE UNWANTED BITS AND WRITE THE BYTE TO MEMORY WITH ╧╥┴+╙╘┴.
╫HEN YOU THINK ABOUT IT MORE, IT IS OBVIOUS THAT THIS TAKES A GENEROUS AMOUNT
OF TIME, HANDLING EVERY BIT SEPERATELY WILL TAKE MUCH MORE THAN EIGHT TIMES
THE TIME A SIMPLE ╠─┴+╙╘┴ TAKES. ╙OME CODERS HAVE AVOIDED THIS BY PLOTTING
THE SAME CHARACTER TO DIFFERENT CHARACTER SETS SIMULTANEOUSLY AND THEN
CHANGING THE CHARSETS APPROPRIATELY, BUT THE RESULTING SCROLL WON'T BE MUCH
LARGER THAN 96X32 PIXELS.
--------------------------------------------------------------------------
╨ICTURE 1 - ╘WO CHARACTER CODES WILL MAKE A GRAPHICAL BITMAP
╙CREEN MEMORY:
____________________________________
▄├HAR ▄├HAR ▄├HAR ▄├HAR ▄ ...
▄├ODE ▄├ODE ▄├ODE ▄├ODE ▄
▄0 ▄2 ▄80 ▄80 ▄ .
▄ ▄** ** ▄ ▄ ▄ .
▄ ▄** ** ▄ ▄ ▄ .
▄***** ▄****** ▄ ▄ ▄
▄****** ▄ **** ▄ ▄ ▄
▄**__**_▄__**___▄_______▄_______▄
▄** ** ▄ ** ▄ **** ▄├HAR ▄
▄** ** ▄ ** ▄****** ▄├ODE ▄
▄****** ▄ ▄** ** ▄6 ▄
▄***** ▄ ▄** ▄ ▄
▄├HAR ▄├HAR ▄** ** ▄ ▄
▄├ODE ▄├ODE ▄****** ▄ ▄
▄1 ▄3 ▄4**** ▄***** ▄
▄_______▄_______▄_______▄******_▄
▄├HAR ▄├HAR ▄ ▄** ** ▄
▄├ODE ▄├ODE ▄ ▄****** ▄
▄80 ▄80 ▄ ▄***** ▄
▄ ▄ ▄ ▄** ▄
▄ ▄ ▄├HAR ▄**AR ▄
▄ ▄ ▄├ODE ▄├ODE ▄
▄ ▄ ▄5 ▄7 ▄
▄_______▄_______▄_______▄_______▄
├HARACTER SET MEMORY:
_________________________________________________________________
▄├HAR 0 ▄├HAR 1 ▄├HAR 2 ▄├HAR 3 ▄├HAR 4 ▄├HAR 5 ▄├HAR 6 ▄├HAR 7 ▄ ...
▄_______▄_______▄_______▄_______▄_______▄_______▄_______▄_______▄__
──────── ┘┘┘┘┘┘┘┘ ├├├├├├├├ ╨╨╨╨╨╨╨╨
╞IRST COLUMN ╙ECOND COLUMN ╘HIRD COLUMN ╞OURTH COLUMN
--------------------------------------------------------------------------
╨ICTURE 2 - ─┘├╨ WITH SPRITES
╙PRITE 0
_______________________
▄ ▄** ** ▄ ▄
▄ ▄** ** ▄ ▄
▄ ▄****** ▄ ▄
▄***** ▄ **** ▄ ▄
▄****** ▄ ** ▄ ▄
▄** ** ▄ ** ▄ ▄
▄** ** ▄ ** ▄ ▄
▄**__**_▄_______▄_______▄
▄****** ▄ ▄ **** ▄
▄***** ▄ ▄****** ▄
▄ ▄ ▄** ** ▄
▄ ▄ ▄** ▄
▄ ▄ ▄** ** ▄
▄ ▄ ▄****** ▄
▄ ▄ ▄ **** ▄
▄_______▄_______▄_______▄ ╙PRITE 1
▄ ▄ ▄ ▄ _______________________
▄ ▄ ▄ ▄▄***** ▄ ▄ ▄
▄ ▄ ▄ ▄▄****** ▄ ▄ ▄
▄ ▄ ▄ ▄▄** ** ▄ ▄ ▄
▄_______▄_______▄_______▄▄****** ▄ ▄ ▄
▄***** ▄ ▄ ▄
▄** ▄ ▄ ▄
▄** ▄ ▄ ▄
▄_______▄_______▄_______▄
▄ ▄ ▄ ▄
▄ ▄ ▄ ▄
▄ ▄ ▄ ▄
▄ ▄ **** ▄ ▄
▄ ▄ **** ▄ ▄
▄ ▄ ▄****** ▄
▄ ▄ ▄****** ▄
▄_______▄_______▄__**___▄
▄ ▄ ▄ ** ▄
▄ ▄ ▄ ** ▄
▄ ▄ ▄ ** ▄
▄ ▄ ▄ ** ▄
▄_______▄_______▄_______▄
--------------------------------------------------------------------------
╨ICTURE 3 - ╙PRITE MULTIPLEXING
__ ╙ET COORDINATES FOR EIGHT SPRITES
__▄3 ▄ THAT START FROM THE TOP HALF.
▄4 ▄ ▄__
__▄ └--▄2 ▄
▄5 └--' ▄ ▄
▄ ▄ └--'__
└--' ▄1 ▄
▄ ▄
__ └--'
▄6 ▄
▄ ▄ __
└--' ▄0 ▄
▄ ▄
-__------------------------------------└--'╫HEN ╓╔├ HAS DISPLAYED THE LAST
▄0 ▄ __ SPRITE, SET COORDINATES FOR THE
▄ ▄ ▄6 ▄ SPRITES IN THE LOWER HALF OF THE
└--' ▄ ▄ AREA.
└--'
__
▄1 ▄ __
▄ ▄ ▄5 ▄
└-- __ ▄ ▄
▄2 ▄ __└--'
▄ ▄__▄4 ▄ ┘OU USUALLY HAVE TWO SPRITES THAT
└--▄3 ▄ ▄ ARE ONLY 'USED' ONCE SO THAT YOU
▄ └--' CAN CHANGE OTHER SPRITES WHEN ╓╔├
└__' IS DISPLAYING THEM.
--------------------------------------------------------------------------
─┘├╨ DEMO PROGRAM (╨┴╠)
╙╔╬╒╙= $├╞00 ; ╨LACE FOR THE SINUS TABLE
├╚╥╙┼╘= $3800 ; ╚ERE BEGINS THE CHARACTER SET MEMORY
╟╞╪= $3├00 ; ╚ERE WE PLOT THE DYCP DATA
╪16= $├┼00 ; VALUES MULTIPLICATED BY 16 (0,16,32..)
─16= $├┼30 ; DIVIDED BY 16 (16 X 0,16 X 1 ...)
╙╘┴╥╘= $033├ ; ╨OINTER TO THE START OF THE SINUS
├╧╒╬╘┼╥= $033─ ; ╙CROLL COUNTER (X-SCROLL REGISTER)
╨╧╔╬╘┼╥= $033┼ ; ╨OINTER TO THE TEXT CHAR
┘╨╧╙= $0340 ; ╠OWER 4 BITS OF THE CHARACTER Y POSITIONS
┘╨╧╙╚= $0368 ; Y POSITIONS DIVIDED BY 16
├╚┴╥= $0390 ; ╙CROLL TEXT CHARACTERS, MULTIPLICATED BY EIGHT
┌╨= $╞┬ ; ┌EROPAGE AREA FOR INDIRECT ADDRESSING
┌╨2= $╞─
┴═╧╒╬╘= 38 ; ┴MOUNT OF CHARS TO PLOT-1
╨┴─├╚┴╥= 32 ; ├ODE USED FOR CLEARING THE SCREEN
*= $├000
╙┼╔ ; ─ISABLE INTERRUPTS
╠─┴ #$32 ; ├HARACTER GENERATOR ╥╧═ TO ADDRESS SPACE
╙╘┴ $01
╠─╪ #0
╠╧╧╨0 ╠─┴ $─000,╪ ; ├OPY THE CHARACTER SET
╙╘┴ ├╚╥╙┼╘,╪
╠─┴ $─100,╪
╙╘┴ ├╚╥╙┼╘+256,╪
─┼╪
┬╬┼ ╠╧╧╨0
╠─┴ #$37 ; ╬ORMAL MEMORY CONFIGURATION
╙╘┴ $01
╠─┘ #31
╠╧╧╨1 ╠─┴ #66 ; ├OMPOSE A FULL SINUS FROM A 1/4TH OF A
├╠├ ; CYCLE
┴─├ ╙╔╬,╪
╙╘┴ ╙╔╬╒╙,╪
╙╘┴ ╙╔╬╒╙+32,┘
╠─┴ #64
╙┼├
╙┬├ ╙╔╬,╪
╙╘┴ ╙╔╬╒╙+64,╪
╙╘┴ ╙╔╬╒╙+96,┘
╔╬╪
─┼┘
┬╨╠ ╠╧╧╨1
╠─╪ #$7╞
╠╧╧╨2 ╠─┴ ╙╔╬╒╙,╪
╠╙╥
├╠├
┴─├ #32
╙╘┴ ╙╔╬╒╙+128,╪
─┼╪
┬╨╠ ╠╧╧╨2
╠─╪ #39
╠╧╧╨3 ╘╪┴
┴╙╠
┴╙╠
┴╙╠
┴╙╠
╙╘┴ ╪16,╪ ; ═ULTIPLICATION TABLE (FOR SPEED)
╘╪┴
╠╙╥
╠╙╥
╠╙╥
╠╙╥
├╠├
┴─├ #>╟╞╪
╙╘┴ ─16,╪ ; ─IVIDING TABLE
╠─┴ #0
╙╘┴ ├╚┴╥,╪ ; ├LEAR THE SCROLL
─┼╪
┬╨╠ ╠╧╧╨3
╙╘┴ ╨╧╔╬╘┼╥ ; ╔NITIALIZE THE SCROLL POINTER
╠─╪ #7
╙╘╪ ├╧╒╬╘┼╥
╠╧╧╨10 ╙╘┴ ├╚╥╙┼╘,╪ ; ├LEAR THE @-SIGN..
─┼╪
┬╨╠ ╠╧╧╨10
╠─┴ #>├╚╥╙┼╘ ; ╘HE RIGHT PAGE FOR ADDRESSING
╙╘┴ ┌╨2+1
╠─┴ #<╔╥╤ ; ╧UR INTERRUPT HANDLER ADDRESS
╙╘┴ $0314
╠─┴ #>╔╥╤
╙╘┴ $0315
╠─┴ #$7╞ ; ─ISABLE TIMER INTERRUPTS
╙╘┴ $─├0─
╠─┴ #$81 ; ┼NABLE RASTER INTERRUPTS
╙╘┴ $─01┴
╠─┴ #$┴8 ; ╥ASTER COMPARE TO SCAN LINE $┴8
╙╘┴ $─012
╠─┴ #$1┬ ; 9TH BIT
╙╘┴ $─011
╠─┴ #30
╙╘┴ $─018 ; ╒SE THE NEW CHARSET
├╠╔ ; ┼NABLE INTERRUPTS AND RETURN
╥╘╙
╔╥╤ ╔╬├ ╙╘┴╥╘ ; ╔NCREASE COUNTER
╠─┘ #┴═╧╒╬╘
╠─╪ ╙╘┴╥╘
╠╧╧╨4 ╠─┴ ╙╔╬╒╙,╪ ; ├OUNT A POINTER FOR EACH TEXT CHAR AND ACCORDING
┴╬─ #7 ; TO IT FETCH A Y-POSITION FROM THE SINUS TABLE
╙╘┴ ┘╨╧╙,┘ ; ╘HEN DIVIDE IT TO TWO BYTES
╠─┴ ╙╔╬╒╙,╪
╠╙╥
╠╙╥
╠╙╥
╙╘┴ ┘╨╧╙╚,┘
╔╬╪ ; ├HARS ARE TWO POSITIONS APART
╔╬╪
─┼┘
┬╨╠ ╠╧╧╨4
╠─┴ #0
╠─╪ #79
╠╧╧╨11 ╙╘┴ ╟╞╪,╪ ; ├LEAR THE DYCP DATA
╙╘┴ ╟╞╪+80,╪
╙╘┴ ╟╞╪+160,╪
╙╘┴ ╟╞╪+240,╪
╙╘┴ ╟╞╪+320,╪
╙╘┴ ╟╞╪+400,╪
╙╘┴ ╟╞╪+480,╪
╙╘┴ ╟╞╪+560,╪
─┼╪
┬╨╠ ╠╧╧╨11
═┴╦┼ ╠─┴ ├╧╒╬╘┼╥ ; ╙ET X-SCROLL REGISTER
╙╘┴ $─016
╠─╪ #┴═╧╒╬╘
├╠├ ; ├LEAR CARRY
╠╧╧╨5 ╠─┘ ┘╨╧╙╚,╪ ; ─ETERMINE THE POSITION IN VIDEO MATRIX
╘╪┴
┴─├ ╠╔╬┼╙╠,┘ ; ├ARRY WON'T BE SET HERE
╙╘┴ ┌╨ ; LOW BYTE
╠─┴ #4
┴─├ ╠╔╬┼╙╚,┘
╙╘┴ ┌╨+1 ; HIGH BYTE
╠─┴ #╨┴─├╚┴╥ ; ╞IRST CLEAR ABOVE AND BELOW THE CHAR
╠─┘ #0 ; 0. ROW
╙╘┴ (┌╨),┘
╠─┘ #120 ; 3. ROW
╙╘┴ (┌╨),┘
╘╪┴ ; ╘HEN PUT CONSECUENT CHARACTER CODES TO THE PLACES
┴╙╠ ; ├ARRY WILL BE CLEARED
╧╥┴ #$80 ; ╔NVERTED CHARS
╠─┘ #40 ; 1. ROW
╙╘┴ (┌╨),┘
┴─├ #1 ; ╔NCREASE THE CHARACTER CODE, ├ARRY WON'T BE SET
╠─┘ #80 ; 2. ROW
╙╘┴ (┌╨),┘
╠─┴ ├╚┴╥,╪ ; ╫HAT CHARACTER TO PLOT ? (SOURCE)
╙╘┴ ┌╨2 ; (CHAR IS ALREADY MULTIPLICATED BY EIGHT)
╠─┴ ╪16,╪ ; ─ESTINATION LOW BYTE
┴─├ ┘╨╧╙,╪ ; (16*CHAR CODE + Y-POSITION'S 3 LOWEST BITS)
╙╘┴ ┌╨
╠─┴ ─16,╪ ; ─ESTINATION HIGH BYTE
╙╘┴ ┌╨+1
╠─┘ #6 ; ╘RANSFER 7 BYTES FROM SOURCE TO DESTINATION
╠─┴ (┌╨2),┘ : ╙╘┴ (┌╨),┘
─┼┘ ; ╘HIS IS THE FASTEST WAY ╔ COULD THINK OF.
╠─┴ (┌╨2),┘ : ╙╘┴ (┌╨),┘
─┼┘
╠─┴ (┌╨2),┘ : ╙╘┴ (┌╨),┘
─┼┘
╠─┴ (┌╨2),┘ : ╙╘┴ (┌╨),┘
─┼┘
╠─┴ (┌╨2),┘ : ╙╘┴ (┌╨),┘
─┼┘
╠─┴ (┌╨2),┘ : ╙╘┴ (┌╨),┘
─┼┘
╠─┴ (┌╨2),┘ : ╙╘┴ (┌╨),┘
─┼╪
┬╨╠ ╠╧╧╨5 ; ╟ET NEXT CHAR IN SCROLL
╠─┴ #1
╙╘┴ $─019 ; ┴CKNOWLEDGE RASTER INTERRUPT
─┼├ ├╧╒╬╘┼╥ ; ─ECREASE THE COUNTER = MOVE THE SCROLL BY 1 PIXEL
┬╨╠ ╧╒╘
╠╧╧╨12 ╠─┴ ├╚┴╥+1,┘ ; ═OVE THE TEXT ONE POSITION TO THE LEFT
╙╘┴ ├╚┴╥,┘ ; (┘-REGISTER IS INITIALLY ZERO)
╔╬┘
├╨┘ #┴═╧╒╬╘
┬╬┼ ╠╧╧╨12
╠─┴ ╨╧╔╬╘┼╥
┴╬─ #63 ; ╘EXT IS 64 BYTES LONG
╘┴╪
╠─┴ ╙├╥╧╠╠,╪ ; ╠OAD A NEW CHAR AND MULTIPLY IT BY EIGHT
┴╙╠
┴╙╠
┴╙╠
╙╘┴ ├╚┴╥+┴═╧╒╬╘ ; ╙AVE IT TO THE RIGHT SIDE
─┼├ ╙╘┴╥╘ ; ├OMPENSATION FOR THE TEXT SCROLLING
─┼├ ╙╘┴╥╘
╔╬├ ╨╧╔╬╘┼╥ ; ╔NCREASE THE TEXT POINTER
╠─┴ #7
╙╘┴ ├╧╒╬╘┼╥ ; ╔NITIALIZE ╪-SCROLL
╧╒╘ ╩═╨ $┼┴7┼ ; ╥ETURN FROM INTERRUPT
╙╔╬ ┬┘╘ 0,3,6,9,12,15,18,21,24,27,30,32,35,38,40,42,45
┬┘╘ 47,49,51,53,54,56,57,59,60,61,62,62,63,63,63
; 1/4 OF THE SINUS
╠╔╬┼╙╠ ┬┘╘ 0,40,80,120,160,200,240,24,64,104,144,184,224
┬┘╘ 8,48,88,128,168,208,248,32
╠╔╬┼╙╚ ┬┘╘ 0,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,3
╙├╥╧╠╠ ╙├╥ "╘╚╔╙@╔╙@┴╬@┼╪┴═╨╠┼@╙├╥╧╠╠@╞╧╥@"
╙├╥ "├╧══╧─╧╥┼@═┴╟┴┌╔╬┼@┬┘@╨┴╙╔@╧╩┴╠┴@@"
; ╙├╥ WILL CONVERT TEXT TO SCREEN CODES
--------------------------------------------------------------------------
┬ASIC LOADER FOR THE ─YCP DEMO PROGRAM (╨┴╠)
1 ╙=49152
2 ─┼╞╞╬╚(├)=├-48+7*(├>64)
3 ├╚=0:╥┼┴─┴$,┴:╨╥╔╬╘┴$:╔╞┴$="┼╬─"╘╚┼╬╨╥╔╬╘"<WHITE><CLR>":╙┘╙49152:┼╬─
4 ╞╧╥╞=0╘╧31:╤=╞╬╚(┴╙├(═╔─$(┴$,╞*2+1)))*16+╞╬╚(┴╙├(═╔─$(┴$,╞*2+2)))
5 ├╚=├╚+╤:╨╧╦┼╙,╤:╙=╙+1:╬┼╪╘:╔╞├╚=┴╘╚┼╬3
6 ╨╥╔╬╘"├╚┼├╦╙╒═ ┼╥╥╧╥":┼╬─
100 ─┴╘┴ 78┴9328501┴200┬─00─09─0038┬─00─19─0039├┴─0╞1┴9378501┴01╞┴942187─, 3441
101 ─┴╘┴ 75├19─00├╞9920├╞┴94038╞─75├19─40├╞9960├╞┼88810┼4┴27╞┬─00├╞4┴1869, 4302
102 ─┴╘┴ 209─80├╞├┴10╞3┴2278┴0┴0┴0┴0┴9─00├┼8┴4┴4┴4┴4┴18693├9─30├┼┴9009─90, 3231
103 ─┴╘┴ 03├┴10┼58─3┼03┴2078┼3─039─0038├┴10╞┴┴93885╞┼┴99┬8─1403┴9├08─1503, 3338
104 ─┴╘┴ ┴97╞8─0──├┴9818─1┴─0┴9┴88─12─0┴91┬8─11─0┴91┼8─18─05860┼┼3├03┴026, 3864
105 ─┴╘┴ ┴┼3├03┬─00├╞2907994003┬─00├╞4┴4┴4┴996803┼8┼88810┼┴┴900┴24╞9─003├, 3256
106 ─┴╘┴ 9─503├9─┴03├9─╞03├9─403─9─903─9─┼03─9─303┼├┴10┼5┴─3─038─16─0┴226, 3739
107 ─┴╘┴ 18┬├68038┴7995├185╞┬┴90479┴┴├185╞├┴920┴00091╞┬┴07891╞┬8┴0┴0980┴0, 4224
108 ─┴╘┴ 2891╞┬6901┴05091╞┬┬─900385╞─┬─00├┼7─400385╞┬┬─30├┼85╞├┴006┬1╞─91, 4440
109 ─┴╘┴ ╞┬88┬1╞─91╞┬88┬1╞─91╞┬88┬1╞─91╞┬88┬1╞─91╞┬88┬1╞─91╞┬88┬1╞─91╞┬├┴, 6225
110 ─┴╘┴ 109╞┼┼19─0├┼3─031028┬99103999003├8├026─0╞5┴─3┼03293╞┴┴┬─┬╞├10┴0┴, 3593
111 ─┴╘┴ 0┴8─┬603├┼3├03├┼3├03┼┼3┼03┴9078─3─034├7┼┼┴000306090├0╞1215181┬1┼, 2159
112 ─┴╘┴ 202326282┴2─2╞3133353638393┬3├3─3┼3┼3╞3╞3╞00285078┴0├8╞018406890, 2268
113 ─┴╘┴ ┬8┼008305880┴8─0╞82000000000000000010101010101020202020202020314, 1379
114 ─┴╘┴ 08091300091300010┼000518010─100├05001303120╞0├0├00060╞1200030╞0─, 304
115 ─┴╘┴ 0─0╞040╞1205000─0107011┴090┼050002190010011309000╞0┴010├01000000, 257
200 ─┴╘┴ ┼╬─,0
--------------------------------------------------------------------------
╒UENCODED ├64 EXECUTABLE OF THE BASIC LOADER (╨┴╠)
BEGIN 644 DYCP.64
═└0@-"└$└4[(╘.3$╒,@└╞"└(└┼╩5(*$,╔╠─.╦-#┬╩-┌╨╚0[$╓-"─└4@@#└$-(@
═╠├└┌┴╘$─+$$┌╞4$─.╚═!)+(┬14┘$(╩>9(@63(├╩>-#─╤-3(┌@└")"└0└@4:╥┼
═,*0╙,3╔1╠╩5(*,8╚╥┬┴!)"╤&╦#*╩,2─╔*:╨╤-╩╩┼2"├&*,╚╚020╠1╩╨╥╩├(╔┴
═*2─└╩@@%└$-(╠─-(╩┼$┌┼╒,╠43╔3╠┼.╩,3╩".╚═#2+)!╔╙,└╨@@&└)─┬0╘┴%.
═0╘═354╘@15)23╒(┬.╚└└#╨┼─└(,@-╙┴!.3,╥.#4╨,4$╥,#!"1#└╨1#└┘1#└╨.
═,╙┴"1#└╨1#$┘1#└╨,╙┼#040╨1├%!.3,╫.#4╨,4$╨,49!.30╥,3@╫1"╨@,╙0╘#
═,0!<"64└@╥└╫-4,╤.40╨,$-&.3─╥,$-&03─╘,#,╪1─0╫-4,╤.40╘,$-&.3─╓&
═,$-&13@╪.#$╨131!,├=&0─0╨,$-&-$$╤.#8┘+"└╘,╙└╥└*─)9@"#(#(╨.40╪3
═,$-&0╘$╤,$8╙03(╥-╙┴!,$$╨03!!,$$┘1#└╨0╘4╪031!-$$╘031!,3@╓.3-#╨
═.40╙,$-%03─╨,#┼$.3└╠(#,╥,╙$└]@┼╟└(,@,#-#03$╨134╪1#-%,#-!,├└╫┘
═.$4╙1#└╙.40╨,#,╪0╘$╤,$9!03─╙.#@╒1─5!.3┼".$0╤-#└╙03┼#,#┴$,34╨@
═,╥╨@,╙,╙.└!#"╞@└@╥!!.3=&.$0╨1$1#03─╪,3┴$,4%$,$$┘03@╪1#$╥1#!!┬
═.3%".$0╤,40╨03─╤13┴$,3┴$,#4╪-├!%13-#,#-!,#(╓+"└╙.#8╘└)└*:0"#]
═($%%,╘,╨,╘)$,#!#1├(┘,#<┘.30╨,#-"1#└╨0╘8╘031!-$$┘.38╪,#-%.$4╪$
═.#@╤,$5!03─╨,$$╥-$8┘1#└╨,╘,╠(#,╥-38└╫0╔╩└(,@.40╒,#-#.41!,#-#]
═.41&,#-#.40╘,#-$.40┘,#-$.41%,#-$.40╙,#-%0╘$╤,$4╒040╙1#└╙.$0╤*
═-─0╨03(╥-┬╨@,╙<╙.0└╩"╓╠└@╥└╤.$)#-├@╨,╙┴!-╙─┘-4,╤.#5&0─$┘,#0╫^
═.4%!0╙$╪-49#03─╥,$$╨,#└┘,49"03└╫.#─╤1─(╪03!!,#─╪,$$╨+"└╘,├(╘:
═└'<+;└"#(#(╪.3%&0├8┘,#%!,#4╨.3%&0─)$.3└╨,╙@╒1─1"1#└╨0╘4╫1#0╨;
═,#,╪-49"0─0╙,$-%.#5&0╘$╨,#9",49$.3$╠(#0╘-#└└╤└══└(,@1─(╪.$(╤?
═1─0┘,49".#┴",49$.3%&0├@╪0├%&1#─╤1─(╪.$(╤1─0┘,49".#┴",49$.3%&╓
═0├@╪0├%&1#─╤1─)#02╨@-├(╥-0└1#&╪└@╥└╤,#┼&144╤.40╨0╘4╙1#└╙,3└╥╦
═.$(┘.3$╨,╙─┘.3└╨,╘,╪0╙└╥-─0╨1├5!1#-%,#,╥.3-&04%"1$)&0╙$╨03!!═
═+"└╙-3─╙└%╪,;╨"#(#!!.$1"-├└╙0╘4╙0╙└╙0╘4╙0╙└╙144╙13└╙03─╨-╙┴$╚
═,╘0╨,╙1#-╘5%03└╨,#,╨-├└┘,$,╨1├$╥,34╤.#%",44╠(#(╤-3─└╩╨╤╨└(,@0
═,├└╥,╙(╓,├@╥03)$,─8╙,3,╙,╙4╙-├,╪,╙─╙0├-#,╘0╙13-%,╘8╙1├-&,#└╥[
═.#4╨-╙┴!,$,╪1├└╤.#0╨-├@┘,"╨@,├(╓.└#╪#'$└@╥!".$4╨,#@╙,#4╪.#!!8
═.$0╨1├@╥,#└╨,#└╨,#└╨,#└╨,#└╨,#$╨,3└╤,#$╨,3└╤,#(╨,├└╥,#(╨,├└╥^
═,#(╨,╙$╘+"└╤,╙<┘└$0-<@"#(#└╪,#─╤,╙└╨,#─╤,╙└╨,#$╨13└╨,#4╤.#└╤7
═,$0╤,#!#,#4╨,#$╙,#,╤,├!&,$,╨0╙└╨,#8╨1├$╥,#└╨,╙!&,$0╠(#,╨-└"02
═#7,└@╥└╨1#!&,#0╨1├$╥,#4╨,#!$,#$╨-╙└╤,4$╨.3!%,#4╨,#└╥,3─╨,#$╨.
╠,#$╤,╙└┘,#└╨1├!!,#$╨0╙└╤,#└╨,#└╨+"└╥-3<└╟└╫(└(,@14┘$+#└└└└└╨╦
└└
END
SIZE 1439
--------------------------------------------------------------------------
╒UENCODED ├64 EXECUTABLE OF THE BASIC LOADER (╬╘╙├)
BEGIN 644 DYCP-NTSC.BAS
═└0@-"└$└4[(╘.3$╒,@└╞"└(└┼╩5(*$,╔╠─.╦-#┬╩-┌╨╚0[$╓-"─└40@#└$-(?
═╠├└┌┴╘$─+$$┌╞4$─.╚═!)+(┬14┘$(╩>9(╔,┬.╔╪╘.3$╒,├╩└└(@(!└"!1╦(╨/
═╔#,╤.┼&╥╔4@╚╤┬├**$$─+$:╠,╩╚╤*2─╔╦#$╓╩╩5(*,8╚╥┬┴!)"╤&╦#*╩,┬─╔:
═*0"╔"└4└0╘┬╥0╘┬╩43╩74╥╤1.┼.╥4┌╚╤.╚(┌┬╘-(╠─&╟,╨#!"└8└╞2)#2$5#╞
═2╒-532!%4┼)/4┬(┌@└#'"%╚└@└└4"60└@╥└╫.$$┘,╙(╪-3└╤03(╨,$)$,#!$╠
═,#┼$,#└╙.$)$,#!$,3┼$,#└╙.4-!1#!&,4$┘,╙<╪-3└╤03└╤1─$┘-#(╤.#=$╔
═+"└╙-#0╤└&$)90"#(#<╒0╙$┘1#└╨0╘8┘.3(╨0╘9!.30╨,╙┴&1#<╒0╙$┘1#0╨!
═0╘8┘.38╨0╘9%.#@╪,3!%-$$╥-╘9"1#└╨0╘8╘03$╪-├─╠(#0╙,#(└╦@┼╞└(,@╥
═,├└┘1#@╨0╘9#03$╨1├-!,├(╫.$$╨03!!,$$╨03┼$,#!#13┴!-$$╘031!-$$╤╩
═.#8┘,╘,┘1#,╨0╘5!.3└╨.40┘,"╨@,╙(╙,0#["6<└@╥└╨,╘-!,3!%-3┴$,╘4╨.
═,╘$╥,#<╪13-$,#,┘1#└╨,╙┴#03$╨1─%!.3,╪.#5&14$┘.4(╪1#$╘,#-!.4,╨;
═.$0╤-3└╙+"└╙,╙,╪└$@*:└"#($$┘-╘8╪1#!$1$-!.3@╤.$0╤040╨03┼",#┴$:
═,3)$,$$┘,4(╪1#$╤1#!!.3%%.$0╤.$0╨-3@╓,$5%,╘,╨,╘$╨,4,╠(#,╪-├(└9
═┼0╔╔└(,@044╙0╙└╙0─0╨,$-&,├─╨-╙─┘-#└╨,╘)$,#!#1├1!-$$╘03─┘-├@╨┬
═,╘4╪13@╪.#$╨14%!.3└╨03(╘1├┼$,#└╙0╥╨@,╙(╒-@#┬"╞╚└@╥└┘1#4╨,╘,┘$
═1$$╨,╘,┘1$8╨,╘,┘1#0╨,╘0┘1#─╨,╘0┘1$4╨,╘0┘1#,╨,╘5#03$╨135!1#-$┼
═,#,╪1#$╓1#!!,├%#+"└╙-╙(┘└"\+:╨"#(#$╪0─,╓.#└╙.$$╫.3─╒0╙$╪-49")
═03─╨-#<┘04%#,3@╒1─-!.3(╨03└╨,#─╤1─)!,#<╪.3%&0├┴!,$$╨.3@╨03└╠#
═(#0╥,├0└?└═╠└(,@,├@┘,49"-├─╨,4$╨-3└┘,49"0─0┘,#└╙.#5&1$)$,#!#╚
═13=$-#└╨,╙@╒1─)"1#,╨0╘4╪-49#03└╨-─(╤1─0┘,2╨@-#0╘,└#)"╓╘└@╥!&├
═0├@╪0├%&1#─╤1─(╪.$(╤1─0┘,49".#┴",49$.3%&0├@╪0├%&1#─╤1─(╪.$(╤┴
═1─0┘,49".#┴",49$.3%&0─-!+"└╓,├(╒└!8,;@"#(#$╨.49%13$┘1#!#13-$╘
═,#,╤,#(╪0├─┘,3└╙.3─┘,#└╙0╙┴#,#(╓1#!&-4%$,╘4╨,╙(┘,╘9!04)$0─9#0
═,3!!,$$╠(#,╒.3,└8╨╤╧└(,@,$$╪1$(╓,#-#13-#,#-#13-#,#-%13-%,#-!─
═.3└╫.$0╙1#└╙-$,╫145!,#└╨,╙└╓,#─╨0╙!&,3(╤-3$╪,4(╤12╨@,├$╒.0"╨2
═#'└└@╥└╥,#(╙,├8╥.#)!,─0╥1├,╤,╙,╙-3,╓,╙@╙.3-",╘,╙1#-%,╘4╙1├-&/
═,╘8╨,#(╪-3└╫.$$╨0╙┴&,#$╪-#└╓.#─╨+"└╥,├8╪└/╘,<0"#($(╪13└╨.#,╨2
═-3@╪,$$╪1#!&.#(╨,#└╨,#└╨,#└╨,#└╨,#└╨,3└╤,#$╨,3└╤,#$╨,├└╥,#(╨>
═,├└╥,#(╨,├└╙,30╠(#$╙-╙─└20╒╥└(,@,#@╨.3$╙,#└╨.3$╙,#└╨,3!%,#└╨3
═-3$╪,#$╨1#$╨,$,╨-3└╨,3,╨,╙$╥,$8╨0╙!#,#└╨-├!&,3(╨,#└╙,$8╨1"╨@╩
═,╙└╘└)4-<╨"#(#!$,$8╨-#!&,3(╨-3└╨,$0╨,3└╫,#$╤03└┘,$4╨-3└╨,#(╤└
═.3└╨,3└╨,3$╙,#─╨,#!&,$$╨,3!#,#$╨,#└╨,#└╠(#(╒-╨"┴#7@└@╥!%3─0╠┌
$,└└└└#└╨0
└└
END
SIZE 1444
================================================================================
╧PENING THE BORDERS
BY ╨ASI '┴LBERT' ╧JALA (PO87553@CS.TUT.FI OR ALBERT@CC.TUT.FI)
╫RITTEN: 20-╩UL-92
┴LL TIMINGS ARE IN ╨┴╠, PRINCIPLES WILL APPLY TO ╬╘╙├ TOO.
╥EFER TO ╓╔├ MEMORY MAP IN ╚ACKING ╔SSUE 4.
╓╔├ HAS MANY FEATURES AND TRANSPARENT BORDERS ARE ONE OF THEM. ┘OU CAN NOT
MAKE CHARACTERS APPEAR IN THE BORDER, BUT SPRITES ARE DISPLAYED IN THE
BORDER TOO. "╚OW TO DO THIS THEN?" IS THE BIG QUESTION.
╘HE SCREEN RESOLUTION IN ├64 HAS BEEN AND WILL BE 320 X 200 PIXELS. ═OST
GAMES NEED TO USE THE WHOLE SCREEN TO BE EFFICIENT OR JUST PLAIN PLAYABLE.
┬UT THERE STILL IS THAT USELESS BORDER AREA, AND YOU CAN PUT SCORE AND
OTHER STATUS INFORMATION THERE INSTEAD OF HAVING THEM INTERFERE WITH THE
FULL-SCREEN SMOOTH-SCROLLING PLAYING AREA.
_╚OW TO DISABLE THE VERTICAL BORDERS_
╫HEN ╓╔├ (╓IDEO ╔NTERFACE ├ONTROLLER) HAS DISPLAYED ALL CHARACTER ROWS,
IT WILL START DISPLAYING THE VERTICAL BORDER AREA. ╔T WILL START DISPLAYING
THE CHARACTERS AGAIN IN TOP OF THE SCREEN. ╘HE ROW SELECT REGISTER SETS THE
NUMBER OF CHARACTER LINES ON THE SCREEN. ╔F WE SELECT THE 24-ROW DISPLAY
WHEN ╓╔├ IS DRAWING THE LAST (25TH) ROW, IT DOES NOT START TO DRAW THE
BORDER AT ALL ! ╓╔├ WILL THINK THAT IT ALREADY STARTED TO DRAW THE BORDER.
╘HE 25-ROW DISPLAY MUST BE SELECTED AGAIN IN THE TOP OF THE SCREEN, SO THAT
THE BORDER MAY BE OPENED IN THE NEXT FRAME TOO. ╘HE NUMBER OF DISPLAYED ROWS
CAN BE SELECTED WITH THE BIT 3 IN $D011. ╔F THE BIT IS SET, ╓╔├ WILL DISPLAY
25 ROWS AND 24 ROWS OTHERWISE. ╫E HAVE TO CLEAR THE BIT SOMEWHERE DURING THE
LAST ROW (RASTER LINES $F2-$FA) AND SET IT AGAIN IN TOP OF THE SCREEN OR AT
LEAST SOMEWHERE BEFORE THE LAST ROW (LINE $F2). ╘HIS HAS TO BE DONE IN EVERY
FRAME (50 TIMES PER SECOND IN ╨┴╠).
_╚OW TO OPEN THE SIDEBORDERS_
╘HE SAME TRICK CAN BE APPLIED TO SIDEBORDERS. ╫HEN ╓╔├ IS ABOUT TO START
DISPLAYING THE SIDEBORDER, JUST SELECT 38-COLUMN MODE AND RESTORE 40-COLUMN
MODE SO THAT YOU CAN DO THE TRICK AGAIN IN THE NEXT SCAN LINE. ╔F YOU NEED TO
OPEN THE SIDEBORDERS IN THE BOTTOM OR TOP BORDER AREA, YOU HAVE TO OPEN THE
VERTICAL BORDERS ALSO, BUT THERE SHOULDN'T BE ANY DIFFICULTY IN DOING THAT.
╘HERE IS TWO DRAWBACKS IN THIS. ╘HE TIMING MUST BE PRECISE, ONE CLOCK CYCLE
OFF AND THE SIDEBORDER WILL NOT OPEN (THE SPRITES WILL GENERALLY TAKE CARE OF
THE TIMING) AND YOU HAVE TO DO THE OPENING ON EACH AND EVERY LINE. ╫ITH
TOP/BOTTOM BORDERS ONCE IN A FRAME WAS ENOUGH.
┴NOTHER PROBLEM IS BAD-LINES. ╘HERE IS NOT ENOUGH TIME TO OPEN THE BORDERS
DURING A BAD LINE AND STILL HAVE ALL OF THE SPRITES ENABLED. ╧NE SOLUTION
IS TO OPEN THE BORDERS ONLY ON SEVEN LINES AND LEAVE THE BAD LINES UNOPENED.
┴NOTHER WAY IS TO USE LESS THAN EIGHT SPRITES. ┘OU CAN HAVE SIX OF THEM
ON A BAD LINE AND STILL BE ABLE TO OPEN THE SIDEBORDERS (╨┴╠). ╘HE OLD AND
STILL GOOD SOLUTION IS TO SCROLL THE BAD LINES, SO THAT ╓╔├ WILL NOT START
TO DRAW THE SCREEN AT ALL UNTIL IT IS ALLOWED TO DO SO.
[╥EAD MORE ABOUT BAD LINES FROM PREVIOUS ├=╚ACKING ╔SSUES]
_╙CROLLING THE SCREEN_
╓╔├ BEGINS TO DRAW THE SCREEN FROM THE FIRST BAD LINE. ╓╔├ WILL KNOW WHAT
LINE IS A BAD LINE BY COMPARING ITS SCAN LINE COUNTER TO THE VERTICAL
SCROLL REGISTER : WHEN THEY MATCH, THE NEXT LINE IS A BAD LINE. ╔F WE CHANGE
THE VERTICAL SCROLL REGISTER ($D011), THE FIRST BAD LINE WILL MOVE ALSO.
╔F WE DO THIS ON EVERY LINE, THE LINE COUNTER IN ╓╔├ WILL NEVER MATCH WITH
IT AND THE DRAWING NEVER STARTS (UNTIL IT IS ALLOWED TO DO SO).
╫HEN WE DON'T HAVE TO WORRY ABOUT BAD LINES, WE HAVE ENOUGH TIME TO OPEN THE
BORDERS AND DO SOME OTHER EFFECTS TOO. ╔T IS NOT NECASSARY TO CHANGE THE
VERTICAL SCROLL ON EVERY LINE TO GET RID OF THE BAD LINES, JUST MAKE SURE
THAT IT NEVER MATCHES THE LINE COUNTER (OR ACTUALLY THE LEAST SIGNIFICANT
8 BITS).
┘OU CAN EVEN SCROLL THE BAD LINES INDEPENDENTLY AND YOU HAVE ╞╠─ - ╞LEXIBLE
╠INE ─ISTANCE. ┘OU JUST ALLOW A BAD LINE WHEN IT IS TIME TO DISPLAY THE NEXT
CHARACTER ROW. ╫ITH THIS YOU CAN BOUNCE THE LINES OR SCROLL A HIRES PICTURE
VERY FAST DOWN THE SCREEN. ┬UT THIS HAS NOT SO MUCH TO DO WITH BORDERS, SO
╔ WILL LEAVE IT TO ANOTHER ARTICLE. (╩UST SEND REQUESTS AND ╔ MIGHT START
WRITING ABOUT ╞╠─ ..)
_╟ARBAGE APPEARING_
╫HEN WE OPEN THE TOP AND BOTTOM BORDERS, SOME GRAPHICS MAY APPEAR. ┼VEN
THOUGH ╓╔├ HAS ALREADY COMPLETED THE GRAPHICS DATA FETCHES FOR THE SCREEN
AREA, IT WILL STILL FETCH DATA FOR EVERY CHARACTER POSITION IN TOP AND BOTTOM
BORDERS. ╘HIS WILL NOT DO ANY HARM THOUGH, BECAUSE IT DOES NOT GENERATE ANY
BAD LINES AND HAPPENS DURING VIDEO FETCH CYCLES [SEE ═ISSING ├YCLES ARTICLE].
╓╔├ READS THE DATA FROM THE LAST ADDRESS IN THE CURRENT VIDEO BANK, WHICH IS
NORMALLY $3FFF AND DISPLAYS THIS OVER AND OVER AGAIN.
╔F WE CHANGE THE DATA IN THIS ADDRESS IN THE BORDER AREA, THE CHANGE WILL BE
VISIBLE RIGHT AWAY. ┴ND IF YOU SYNCHRONIZE THE ROUTINE TO THE BEAM POSITION,
YOU CAN HAVE A DIFFERENT VALUE ON EACH LINE. ╔F THERE IS NOTHING ELSE TO DO
IN THE BORDER, YOU CAN GET SEVEN DIFFERENT VALUES ON EACH SCAN LINE.
╘HE BAD THING ABOUT THIS GRAPHICS IS THAT IT IS IMPOSSIBLE TO CHANGE ITS
COLOR - IT IS ALWAYS BLACK. ╔T IS OF COURSE POSSIBLE TO USE INVERTED GRAPHICS
AND CHANGE THE BACKGROUND COLOR. ┴ND IF YOU HAVE DIFFERENT DATA ON EACH LINE,
YOU CAN AS EASILY HAVE DIFFERENT COLOR(S) ON EACH LINE TOO.
╔F YOU DON'T USE $3FFF FOR ANY EFFECTS, IT IS A GOOD IDEA TO SET IT TO ZERO,
BUT REMEMBER TO CHECK THAT YOU DO NOT STORE ANYTHING IMPORTANT IN THAT
ADDRESS. ╔N ONE DEMO ╔ JUST CLEARED $3FFF AND IT WAS RIGHT IN THE MIDDLE OF
ANOTHER PACKED DEMOPART. ╔T TOOK SOME TIME TO FIND OUT WHAT WAS WRONG WITH
THE OTHER PART.
_╚ORIZONTAL SCROLLING_
╘HIS NEW GRAPHICS DATA ALSO OBEYS THE HORIZONTAL SCROLL REGISTER ($─016), SO
YOU CAN DO LIMITED TECH-TECH EFFECTS IN THE BORDER TOO. ┘OU CAN ALSO USE
SPRITES AND OPEN THE SIDEBORDERS. ┘OU CAN SEE AN EXAMPLE OF THE TECH-TECH
EFFECT IN THE FIRST EXAMPLE PROGRAM. ═ULTICOLOR MODE SELECT HAS NO EFFECT
ON THIS DATA. ┘OU CAN READ MORE ABOUT TECH-TECH EFFECTS IN A FUTURE ARTICLE.
_┼XAMPLE ROUTINE_
╘HE EXAMPLE PROGRAM WILL SHOW HOW TO OPEN THE TOP AND BOTTOM BORDERS AND HOW
TO USE THE $3FFF-GRAPHICS. ╔T IS FAIRLY WELL COMMENTED, SO JUST CHECK IT FOR
DETAILS. ╘HE PROGRAM USES A SPRITE TO DO THE SYNCHRONIZATION [SEE ═ISSING
├YCLES ARTICLE] AND READS A PART OF THE CHARACTER ╥╧═ TO THE DISPLAY DATA
BUFFER. ╘O BE HONEST, ╔ MIGHT ADD THAT THIS IS ALMOST THE SAME ROUTINE THAN
THE ONE IN THE ═ISSING ├YCLES ARTICLE. ╔ HAVE INCLUDED BOTH ╨┴╠ AND ╬╘╙├
VERSIONS OF THE EXECUTABLES.
--------------------------------------------------------------------------
╘HE EXAMPLE PROGRAM - $3FFF-GRAPHICS
╔═┴╟┼0= $├┼00 ; ╞IRST GRAPHICS PIECE TO SHOW
╔═┴╟┼1= $├╞00 ; ╙ECOND PIECE
╘┼├╚= $├─00 ; X-SHIFT
╥┴╙╘┼╥= $╞┴ ; ╥ASTERLINE FOR THE INTERRUPT
─╒══┘= $├╞╞╞ ; ─UMMY-ADDRESS FOR TIMING (REFER TO MISSING_CYCLES-ARTICLE)
*= $├000
╙┼╔ ; ─ISABLE INTERRUPTS
╠─┴ #$7╞ ; ─ISABLE TIMER INTERRUPTS (├╔┴)
╙╘┴ $─├0─
╠─┴ #$01 ; ┼NABLE RASTER INTERRUPTS (╓╔├)
╙╘┴ $─01┴
╙╘┴ $─015 ; ┼NABLE THE TIMING SPRITE
╠─┴ #<╔╥╤
╙╘┴ $0314 ; ╔NTERRUPT VECTOR TO OUR ROUTINE
╠─┴ #>╔╥╤
╙╘┴ $0315
╠─┴ #╥┴╙╘┼╥ ; ╙ET THE RASTER COMPARE (9TH BIT WILL BE SET
╙╘┴ $─012 ; INSIDE THE RASTER ROUTINE)
╠─┴ #╥┴╙╘┼╥-20 ; ╙PRITE IS SITUATED 20 LINES BEFORE THE INTERRUPT
╙╘┴ $─001
╠─╪ #111
╠─┘ #0
╙╘┘ $─017 ; ─ISABLE Y-EXPAND
╠─┴ #$32
╙╘┴ $01 ; ╙ELECT ├HARACTER ╥╧═
╠╧╧╨0 ╠─┴ $─000,╪
╙╘┴ ╔═┴╟┼0,┘ ; ├OPY A PART OF THE CHARSET TO BE THE GRAPHICS
╙╘┴ ╔═┴╟┼0+112,┘
╠─┴ $─800,╪
╙╘┴ ╔═┴╟┼1,┘
╙╘┴ ╔═┴╟┼1+112,┘
╔╬┘ ; ╒NTIL WE COPIED ENOUGH
─┼╪
┬╨╠ ╠╧╧╨0
╠─┴ #$37 ; ├HAR ╥╧═ OUT OF THE ADDRESS SPACE
╙╘┴ $01
╠─┘ #15
╠╧╧╨1 ╠─┴ ╪╨╧╙,┘ ; ╘AKE A HALF OF A SINUS AND MIRROR IT TO MAKE
╙╘┴ ╘┼├╚,┘ ; A WHOLE CYCLE AND THEN COPY IT AS MANY TIMES
╙╘┴ ╘┼├╚+32,┘ ; AS NECASSARY
╠─┴ #24
╙┼├
╙┬├ ╪╨╧╙,┘
╙╘┴ ╘┼├╚+16,┘
╙╘┴ ╘┼├╚+48,┘
─┼┘
┬╨╠ ╠╧╧╨1
╠─┘ #64
╠╧╧╨2 ╠─┴ ╘┼├╚,┘
╙╘┴ ╘┼├╚+64,┘
╙╘┴ ╘┼├╚+128,┘
─┼┘
┬╨╠ ╠╧╧╨2
├╠╔ ; ┼NABLE INTERRUPTS
╥╘╙ ; ╥ETURN TO BASIC (?)
╔╥╤ ╠─┴ #$13 ; ╧PEN THE BOTTOM BORDER (TOP BORDER WILL OPEN TOO)
╙╘┴ $─011
╬╧╨
╠─┘ #111 ; ╥EDUCE FOR ╬╘╙├ ?
╔╬├ ─╒══┘ ; ─O THE TIMING WITH A SPRITE
┬╔╘ $┼┴ ; ╫AIT A BIT (ADD A ╬╧╨ FOR ╬╘╙├)
╠╧╧╨3 ╠─┴ ╘┼├╚,┘ ; ─O THE X-SHIFT
╙╘┴ $─016
╞╔╥╙╘ ╠─╪ ╔═┴╟┼0,┘ ; ╠OAD THE GRAPHICS TO REGISTERS
╙┼├╧╬─ ╠─┴ ╔═┴╟┼1,┘
╙╘┴ $3╞╞╞ ; ┴LTERNATE THE GRAPHICS
╙╘╪ $3╞╞╞
╙╘┴ $3╞╞╞
╙╘╪ $3╞╞╞
╙╘┴ $3╞╞╞
╙╘╪ $3╞╞╞
╙╘┴ $3╞╞╞
╙╘╪ $3╞╞╞
╙╘┴ $3╞╞╞
╙╘╪ $3╞╞╞
╠─┴ #0 ; ╘HROW AWAY 2 CYCLES (ADD A ╬╧╨ FOR ╬╘╙├)
─┼┘
┬╨╠ ╠╧╧╨3
╙╘┴ $3╞╞╞ ; ├LEAR THE GRAPHICS
╠─┴ #8
╙╘┴ $─016 ; X-SCROLL TO NORMAL
╠─┴ #$1┬
╙╘┴ $─011 ; ╬ORMAL SCREEN (BE READY TO OPEN THE BORDER AGAIN)
╠─┴ #111
─┼├ ╞╔╥╙╘+1 ; ═OVE THE GRAPHICS BY CHANGING THE LOW BYTE OF THE
┬╨╠ ╧╓┼╥ ; LOAD INSTRUCTION
╙╘┴ ╞╔╥╙╘+1
╧╓┼╥ ╙┼├
╙┬├ ╞╔╥╙╘+1
╙╘┴ ╙┼├╧╬─+1 ; ┴NOTHER GRAPHICS GOES TO OPPOSITE DIRECTION
╠─┴ ╠╧╧╨3+1 ; ═OVE THE X-SHIFT ALSO
╙┼├
╙┬├ #2
┴╬─ #31 ; ╙INUS CYCLE IS 32 BYTES
╙╘┴ ╠╧╧╨3+1
╠─┴ #1
╙╘┴ $─019 ; ┴CKNOWLEDGE THE RASTER INTERRUPT
╩═╨ $┼┴31 ; JUMP TO THE NORMAL IRQ-HANDLER
╪╨╧╙ ┬┘╘ $├,$├,$─,$┼,$┼,$╞,$╞,$╞,$╞,$╞,$╞,$╞,$┼,$┼,$─,$├
┬┘╘ $├,$┬,$┴,$9,$9,$8,$8,$8,$8,$8,$8,$8,$9,$9,$┴,$┬
; HALF OF THE SINUS
--------------------------------------------------------------------------
┬ASIC LOADER FOR THE $3FFF-PROGRAM (╨┴╠)
1 ╙=49152
2 ─┼╞╞╬╚(├)=├-48+7*(├>64)
3 ├╚=0:╥┼┴─┴$,┴:╨╥╔╬╘┴$:╔╞┴$="┼╬─"╘╚┼╬╨╥╔╬╘"<CLEAR>":╙┘╙49152:┼╬─
4 ╞╧╥╞=0╘╧31:╤=╞╬╚(┴╙├(═╔─$(┴$,╞*2+1)))*16+╞╬╚(┴╙├(═╔─$(┴$,╞*2+2)))
5 ├╚=├╚+╤:╨╧╦┼╙,╤:╙=╙+1:╬┼╪╘:╔╞├╚=┴╘╚┼╬3
6 ╨╥╔╬╘"├╚┼├╦╙╒═ ┼╥╥╧╥":┼╬─
100 ─┴╘┴ 78┴97╞8─0──├┴9018─1┴─08─15─0┴9718─1403┴9├08─1503┴9╞┴8─12─0┴9┼68─,4003
101 ─┴╘┴ 01─0┴26╞┴0008├17─0┴9328501┬─00─09900├┼9970├┼┬─00─89900├╞9970├╞├8,4030
102 ─┴╘┴ ├┴10┼┴┴9378501┴00╞┬9─├├09900├─9920├─┴91838╞9─├├09910├─9930├─8810,4172
103 ─┴╘┴ ┼8┴040┬900├─9940├─9980├─8810╞45860┴9138─11─0┼┴┴06╞┼┼╞╞├╞24┼┴┬906,4554
104 ─┴╘┴ ├─8─16─0┬┼53├┼┬91├├╞8─╞╞3╞8┼╞╞3╞8─╞╞3╞8┼╞╞3╞8─╞╞3╞8┼╞╞3╞8─╞╞3╞8┼,4833
105 ─┴╘┴ ╞╞3╞8─╞╞3╞8┼╞╞3╞┴9008810─18─╞╞3╞┴9088─16─0┴91┬8─11─0┴96╞├┼85├010,4163
106 ─┴╘┴ 038─85├038┼─85├08─88├0┴─7╞├018┼901291╞8─7╞├0┼┼19─04├31┼┴0├0├0─0┼,3719
107 ─┴╘┴ 0┼0╞0╞0╞0╞0╞0╞0╞0┼0┼0─0├0├0┬0┴09090808080808080809090┴0┬00000000,318
200 ─┴╘┴ ┼╬─,0
--------------------------------------------------------------------------
┴N UUENCODED ├64 EXECUTABLE $3FFF-PROGRAM (╨┴╠)
BEGIN 644 X╞╞╞.64
═└0@-"└$└4[(╘.3$╒,@└╞"└(└┼╩5(*$,╔╠─.╦-#┬╩-┌╨╚0[$╓-"─└40@#└$-(?
═╠├└┌┴╘$─+$$┌╞4$─.╚═!)+(┬14┘$(╩>9(╔,┬.╔╪╘.3$╒,├╩└└(@(!└"!1╦(╨/
═╔#,╤.┼&╥╔4@╚╤┬├**$$─+$:╠,╩╚╤*2─╔╦#$╓╩╩5(*,8╚╥┬┴!)"╤&╦#*╩,┬─╔:
═*0"╔"└4└0╘┬╥0╘┬╩43╩74╥╤1.┼.╥4┌╚╤.╚(┌┬╘-(╠─&╟,╨#!"└8└╞2)#2$5#╞
═2╒-532!%4┼)/4┬(┌@└└."60└@╥└╫.$$┘-╘8╪1#!$1$-!.3└╤.$0╤040╨.$0╤╦
═-40╨03─╫,3┴$,30╨,╘$┘0╙└╪1#$╒,#-!.49!.$0╤,─0╨03┼%-├┴$+"└╘,#└╙9
═└%╠)90"#(#└╤1#!!,├9&03└╨,#┴#,3=$,$$┘,╙(╪-3└╤0─0╨,$0╨.3─╨,$-%┘
═.3─╫,$-%0─0╨,$0╪.3─╨,$-&.3─╫,$-&0╙@╠(#0╨,╙└└╩└┼╞└(,@0╘$╤,$5!╙
═03─╙-╙@╒,#%!,#!&0├┼$0╘,╨.3─╨,$-$.3─╥,$-$03─╤.#,╪1├┼$0╘,╨.3─╤╠
═,$-$.3─╙,$-$.#@╤,"╨@-#$╫,@#╒"6<└@╥!%.$$╨-#!".3└╨0╘0┘.30╨0╘0┘0
═.3@╨0╘0╪.#$╨1├0╒.#8╨03─╤,╙┴$,3%$,$5!03└╓1─5%1─9#1├(╘14%".3└╓5
═+"└╘-34╘└$(*:└"#($-$.$0╤-─0╨0─4╒,╘-%0├─╤0╘-&.$1&1├-&.$5&1├-&%
═.$1&1├-&.$5&1├-&.$1&1├-&.$5&1├-&.$1&1├-&.$4╠(#0╪,╙,└├╨╔╔└(,@'
═1─8╙1├┴$1─8╙1├┴%1─8╙1─$┘,#└╪.#$╨1#$╪1$9&,╘9!.3└╪.$0╤-─0╨03─╤-
═0├┴$,3%$,$$┘-─9#13@╒0╙└╤,"╨@-#$╓,╨#<"╞╚└@╥└╨,╙┴$.#5#,#,╪140╪+
═-4,╨.$0╪.$,╨040╫1─,╨,3┴%.3└╤,├─╤1├┴$-╘9#,$5%,3┼$,#1#,╙%%03!#.
═,$,╨1#!%+"└╙-╙$┘└"@+:╨"#(#!%,$8╨1├!&,$8╨1├!&,$8╨13!%,$0╨0╙!#╨
═,$(╨03└┘,#─╨.#└╪,#@╨.#└╪,#@╨.#└┘,#─╨03!",#└╨,#└╨,#└╠(#,╤.└└╘>
-"\@└@╥!%3─0╠,└└└└#@╨1
└└
END
SIZE 823
--------------------------------------------------------------------------
┴N UUENCODED ├64 EXECUTABLE $3FFF-PROGRAM (╬╘╙├)
BEGIN 644 XFFF-NTSC.64
═└0@-"└$└4[(╘.3$╒,@└╞"└(└┼╩5(*$,╔╠─.╦-#┬╩-┌╨╚0[$╓-"─└40@#└$-(?
═╠├└┌┴╘$─+$$┌╞4$─.╚═!)+(┬14┘$(╩>9(╔,┬.╔╪╘.3$╒,├╩└└(@(!└"!1╦(╨/
═╔#,╤.┼&╥╔4@╚╤┬├**$$─+$:╠,╩╚╤*2─╔╦#$╓╩╩5(*,8╚╥┬┴!)"╤&╦#*╩,┬─╔:
═*0"╔"└4└0╘┬╥0╘┬╩43╩74╥╤1.┼.╥4┌╚╤.╚(┌┬╘-(╠─&╟,╨#!"└8└╞2)#2$5#╞
═2╒-532!%4┼)/4┬(┌@└#'"%╚└@└└4"60└@╥└╫.$$┘-╘8╪1#!$1$-!.3└╤.$0╤╪
═040╨.$0╤-40╨03─╫,3┴$,30╨,╘$┘0╙└╪1#$╒,#-!.49!.$0╤,─0╨03┼%-├┴$╚
═+"└╘,#└╙└&$)90"#(#└╤1#!!,├9&03└╨,#┴#,3=$,$$┘,╙(╪-3└╤0─0╨,$0╨╪
═.3─╨,$-%.3─╫,$-%0─0╨,$0╪.3─╨,$-&.3─╫,$-&0╙@╠(#0╨,╙└└╦@┼╞└(,@╚
═0╘$╤,$5!03─╙-╙@╒,#%!,#!&0├┼$14,╨.3─╨,$-$.3─╥,$-$03─╤.#,╪1├┼$└
═14,╨.3─╤,$-$.3─╙,$-$.#@╤,"╨@-#$╫-@#["6<└@╥!%.$$╨-#!".3└╨0╘0┘8
═.30╨0╘0┘.3@╨0╘0╪.#$╨1├0╒.#8╨03─╤,╙┴$,3%$,$5!03└╓1─5%1─9#1├(╘+
═14%%04(┘+"└╘-╙@╥└$@*:└"#(#└╨0╘0╪1#$╓1#!"13└╨0╘5".3└╨0╘8╪1$9&>
═,╘8╪149&,╘8╪1$9&,╘8╪149&,╘8╪1$9&,╘8╪149&,╘8╪1$9&,╘8╠(#0╒.#└└?
═┼0╔╔└(,@.$5&1├-&.$1&1├-&.$5&1├-&14%!.3└╨.#@╤,$0╨.$1&1├-&03─╨└
═.#┴$,39$,$$┘,4(╪1#$╤1#!!.39&0╘4╪-┬╨@-#,╙,0#┬"╞╚└@╥!#,#$╨,#,╪┘
═1#@╓0╙└╙.$5$.#9#,#┴$.#┼#,$%$.#!#,#$╪13─╨,3(┘,48╪1#@╨0╙!%13$┘╧
═1#└╘0╙,╤14$╨0╙!#+"└╙.3└╒└"╪+:╨"#(#!$,$4╨13!&,$8╨1├!&,$8╨1├!&╫
═,$4╨13!$,$,╨0╙!",$$╨.3└┘,#@╨.#└╪,#@╨.#└╪,#@╨.3└┘,$$╨0─$╥,#└╠%
4(#4╨-╨└["╓╨└@╥!%3─0╠+3$└└└└╨┬
└└
END
SIZE 830
=============================================================================
┴ ╚EAVY-─UTY ╨OWER ╙UPPLY FOR THE ├-64
BY ╩OHN ├. ┴NDREWS (NO EMAIL ADDRESS)
┴S A ├OMMODORE ╒SER FOR THE LAST 4 PLUS YEARS, ╔ AM AWARE OF THE MANY
ARTICLES AND LETTERS IN THE PRESS THAT HAVE BEMOANED THE BURN-OUT
PROBLEM OF THE ├-64 POWER SUPPLY. ╫HEN OUR ├LUB ┬┬╙ ADDED A ONE MEG
DRIVE AND STAYED ON AROUND THE CLOCK, THE NEED FOR HEAVY-DUTY POWER
SUPPLY BECAME VERY APPARENT.... ╘HREE POWER SUPPLIES WENT IN 3
SUCCESSIVE DAYS!
╨ART OF THE PROBLEM WAS MY IGNORING THE SEASONS. ┘OU SEE DURING THE
WINTER ╔ HAD SET THE POWER SUPPLY BETWEEN THE WINDOW AND THE SCREEN,
┘ES, OUTSIDE! ╫ITH THE ADVENT OF ╙PRING... WELL, YOU GET THE PICTURE.
╘HE TURN-AROUND TIME FORGETTING A NEW COMMERICAL SUPPLY WAS NOT IN THE
BEST INTEREST OF THE ┬┬╙ AND ITS MEMBERS. ╘HEREFORE, TAKING POWER
SUPPLY INHAND, ╔ PROCEEDED TO CUT ONE OPEN ON MY SHOP BANDSAW. ╔ DO
NOT SUGGEST THAT YOU DO THIS. ╘HE PARTS ARE ╞╔╥═╠┘ AND ├╧═╨╠┼╘┼╠┘
ENCASED IN A HARD PLASTIC POTTING COMPOUND. ╘HE PURPOSE OF THIS IS NOT
TO MAKE THE ITEM DIFFICULT TO REPAIR, BUT TO MAKE THE ENTIRE UNIT
CONDUCTIVE TO THE HEAT GENERATED INSIDE. ╔ DOUBT THE WISEDOM OF
POTTING THE FUSE AS WELL. ╚OWEVER, ├┬═ WAS PROBABLY THINKING OF THE
NUMBER OF LITTLE FINGERS THAT COULD FIT INTO AN ACCESSABLE FUSE
HOLDER. IF YOU WANT THE PUNCH LINE IT IS: THE FINAL CIRCUIT BOARD AND
ITS COMPONETS ARE ABOUT THE SIZE OF A BOX OF MATCHES. ╘HIS INCLUDES
THE BUILT-IN METAL HEAT SINK.
╞ROM THESE MINSCULE INNARDS ╔ TRACED OUT THE CIRCUIT AND INCREASED THE
SIZE OF ┴╠╠ COMPONENTS.
╘HE HANDIEST SOURCE OF ELECTRONIC PARTS IS, OF COURSE, ╥ADIO ╙HACK.
┴LL BUT ONE PART CAN BE PURCHASED THERE.
212-1013 ├APACITOR, 35╓, 4700 M╞
212-1022 ├APACITOR, 35╓, 10 U╞
273-1515 ╘RANSFORMER, 2 ┴MP, 9-0-9 ╓┴├
276-1184 ╥ECTIFIER
270- 742 ╞USE ┬LOCK
270-1275 ╞USES
╬OTE THAT THERE ARE ONLY FIVE PARTS. ╘HE REST ARE FUSES, FUSE BLOCKS,
HEAT SINKS, WIRE AND MISC. HARDWARE. ╬OTE ALSO THAT ╔ HAVE NOT LISTED
ANY PLUGS AND CORDS. ╘HIS BECAUSE YOU CAN CLIP THE CORDS OFF OF BOTH
SIDES OF YOUR DEFUNCT POWER SUPPLY. ╘HIS WILL SAVE YOU THE HASSLE OF
WRIING THE ─╔╬ POWER PLUG CORRECTLY:
─╔╬ ╨╔╬ ╧╒╘ ├╧╠╧╥
PIN 6 9╓┴├ BLACK
PIN 7 9╓┴├ BLACK
PIN 5 +5 ╓OLTS BLUE
PIN 1,2,3 SHIELD, GND ORANGE
╘HE PART THAT YOU CAN ╬╧╘ GET AT ╥ADIO ╙HACK IS THE POWER REGULATOR.
╘HIS PART WILL HAVE TO BE SCROUNGED UP FROM SOME LOCAL, BIG
ELECTRONICS SUPPLY HOUSE:
╙╦ 9067 5 VOLT VOLTAGE REGULATOR, 3+ AMPS. (╔ PREFER THE 5 AMP.)
╥ADIO ╙HACK DOES CARRY REGULATORS, BUT THEIR CAPACITY IS NO LARGER
THAN THAT WITH WHICH YOU STARTED.
╘HE ╚EAT SINKS, (YES, MORE THAN ONE!) ARE THE KEY TO THE SUCCESS OF
THIS PROJECT. ╘HE ONES ╔ USED CAME FROM MY ═ODEL ╥AILROADING DAYS.
╙ORRY TO SAY, ╔ DID JUST AHVE THEM 'LYING ABOUT'. ╘HE HEAT SINKS THAT
╔ PRICED AT THE LOCAL ELECTRONICS SUPPLY WERE MORE COSTLY THAN THE
OTHER PARTS. ╘HE WORST CASE SITUATION IS THAT YOU MAY NEED TO DRILL
OUT A COUPLE PIECES OF ALUMINUM SHEET. ╘RY FOR 12 X 12, AND BEND THEM
INTO SQUARE BOTTOMED ╒-SHAPES TO SAVE ROOM. HEAT SINKS SHOULD NOT
TOUCH, OR BE ELECTRONICALLY GROUNDED TO EACH OTHER. ┘OU CAN ALSO MOUNT
THEM ON STAND-OFFS FROM YOUR CHASSIS FOR TOTAL AIR CIRCULATION.
╘HE ╥ADIO ╙HACK TRANSFORMER IS RATED AT ONLY 2 AMPS. ╔F YOU CAN NOT
FIND ONE WITH A HIGHER RATING ELSEWHERE, IT IS POSSIBLE TO HOOK TWO IN
PARALLEL TO GET A 4 AMPERE OUTPUT. ╘HIS SI TRICKY, AS IT CAN BE DONE
EITHER RIGHT OR WRONG!
╚ERE IS HOW TO DO IT THE RIGHT WAY:
╘APE OFF ONE YELLOW SECONDARY LEAD ON EACH TRANSFORMER. ╫ITH TAPE
MARK THE FOUR REMAINING SECONDARY LEADS AND LETTER THEM ┴ AND ┬ ON
ONE TRANSFORMER, ├ AND ─ ONTHE OTHER. ╚OOK UP THE BLACK PRIMARY
LEADS TO A PLUG TO YOUR 120 WALL OUTLET:
▄-------------
╬OTE: *'S - INDICATE CONNECTIONS ▄ 3 ▄▄
+'S - INDICATE SKIP OVERS ▄ 3 ▄▄ (╘RANSFORMER)
▄ 3 ▄▄
▄ 3 ▄▄
▄ ----------
▄ ▄
+--\ /-------------------*---+---------
--▄120▄/ ▄ 3 ▄▄
--▄╓LT▄ ____ ▄ 3 ▄▄
-▄╨LG▄------------▄╞╒╙┼▄-------* 3 ▄▄
+--/ ---- ▄ 3 ▄▄ (╘RANSFORMER)
▄---------
╘HIS WOULD NOW BE A GOOD TIME TO INSTALL A FUSE IN YOUR 120 ╓┴├
LINE. ╬OW BEFORE PLUGGING THIS INTO THE WALL, TIE TWO OF THE
SCONDARY LEADS (ONE FROM ┼┴├╚ TRANSFORMER) TOGETHER.
╙OMETHING LIKE THIS: ┴--╪FMR--┬+├--╪FMR--─
╨LUG IN YOUR 120╓ SIDE. ╬OW USING A ╓╧═ METER, MEASURE THE VOLTAGE
BETWEEN ┴ AND ─.
╔F THE METER READS 18 VOLTS, THEN:
1. UNPLUG FROM THE 120.
2. TIE ┴ AND ├ TOGETHER. TIE ┬ AND ─ TOGETHER.
3. YOUR 2 TRANSFORMERS WILL NOW GIVE YOU 9 VOLTS AT 4 AMPS.
╔F THE METER READS 0 VOLTS, THEN:
1. UNPLUG FROM THE 120.
2. TIE ┴ AND ─ TOGETHER. ╘IE ┬ AND ├ TOGETHER.
3. YOUR 2 TRANSFORMERS WILL NOW GIVE YOU 9 VOLTS AT 4 AMPS.
┬ELOW IS THE FILE CORRESPONDING TO THE FULL SCHEMATIC OF THE POWER SUPPLY.
[┼D'S NOTE: IN ╟EO╨AINT FORMAT, CONVERTED BY CONVERT 2.5, THEN UUENCODED]. ┴S
YOU CAN SEE IN THE PICTURE, ╔ USED ONLY ONE TRANSFORMER. ┬ECAUSE IT GOT HOT,
╔ EPOXIED A SMALL HEAT SINK TO IT. ╫HILE THIS SOLVED THE HEAT PROBLEM, IT DID
NOT INCREASE THE CAPACITY OF THE TOTAL POWER SUPPLY.
╬OTE THAT ╔ USED FUSES ON ALL LINES.
-----------------------------------------------------------------------------
BEGIN 700 SCHEMATIC.
═@╨─,<╓-╚96╒┴=&┼├╚*"@╚*"@╚└─&└0=8!╨8-,╤(└4%)'(&9╧<╞╒┴='1┼9"!'
═14]3(&9╔;&4@5├$╬,└└├╞└└└└"└└└.└└0╪(└└$5╨<╓]╬($╒8+3@╨└*"@╚*└└
═╒╚>-╒╚?(╞!┴┼└╚4"─└+╞└╓"@╚*"@╚*"@╚└@%└0┴6!└<,└"└└└└"""@┴30╘┴%
═34%424.@╚*"@╚*"@└└└└└└└└└└└└$╨!"3$%35$52)╒,@0╘].5─525$52(%8╥
═+├4$6└<╪"└└└└@╥╨#0╘].5─525*"@╚*"@╚*"@╚"╨2└└99└╤$&└10└└└└└
═└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└#%;_____└└└.@└└6?__╞5
═55╞:╩╩╞555╞:╩╩╞555╞:╩╩╞555╞:╩╩╞?__╞@└└7└└└/___\└└└└└└└-__[:└
═└/┘__[╥#!╨$└└/__└└!086┼╬="!);6%╟92!6,2╪╤└└└└└└└└└└└└└└└└└└└└
═└└└└└└└└└└└└9╓5╧4&%╔;╟0@("└@5├(╬,└└└└└└@*$')!═└"╩1*-(─"╔└(╘╟
═0"#]/┘└%╩0"-)╘└@#!\@2$&╔└(╓╠7┌─└┴1&╔!╪40╩3^%%┌╟╤┴1:╔7╪4-╩:╥%
═#*!└╩0╪@3╙&┬_┌4"╥0+╨)╠╟_╘└8@-$&╪4*╟)!═└-╚$.╔)┬!/,2"┴╨╦┴0╞*╓╠
═7_└&(+╘\(($\8%!┴:0#_"@#_└3╨!>└)+└┼╠"/╨&╥└38!┬@%┌└38!├@(╟└/\└
═_╨#_└/\└_╨#_└/\└_╨#_└/\└_╨#_└/\└_╨#_└/\└_╨#_└/\└_╨#_└/\└_╨#_
═└/\└_╨#_└/\└_╨#_└/\└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└
═└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└
═└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└
═└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└└/\└
═_╨#_└/\└_╨#_└/\└┼0└"/╥!%└└└└└└└└_╨"%└└,0_╤!$└└└└└└└└_╨"&└└+╪
═"/\└_╨"┬└/^_╚;\└└"└@,!@,_╨╨810└└└└└└_╨└└"!└0,@_\#└0╨└└└└└└
═_╨└└┴1└#\!└0╚└"("/\└_╨#*└└(@/╪8└└>#_└+└└└3"'(*@└└╞└╨┴┴"8└(@0
═╚└"("/G